package com.wh.minihelp.filter;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.wh.db.jdbc.mysql.BaseJDBCDao;

/**
 * 定义操作接口，方便测试后端
 * 
 * @author washheart@163.com
 */
public interface IFunctionContext {
	public void initContext(ServletContext ctx, HttpSession session, HttpServletRequest request, HttpServletResponse response);

	/**
	 * 调用某模块的某方法
	 * 
	 * @param module
	 * @param method
	 */
	public void forwardModule(String module, String method) throws ServletException, IOException;

	/**
	 * 跳转页面到指定：带有request请求信息
	 * 
	 * @param url
	 */
	public void forward(String url);

	/**
	 * 跳转页面到指定：不带request请求信息
	 * 
	 * @param url
	 */
	public void sendRedirect(String url);

	/**
	 * 向页面返回json数据，一般用于ajax请求
	 * 
	 * @param s
	 * @throws IOException
	 */
	public void json(String s) throws IOException;

	/**
	 * 向页面返回xml数据，一般用于ajax请求
	 * 
	 * @param xml
	 * @throws IOException
	 */
	public void xml(String xml) throws IOException;

	/**
	 * 向页面返回文本数据，一般用于ajax请求
	 * 
	 * @param str
	 * @throws IOException
	 */
	public void message(String str) throws IOException;

	/**
	 * 跳转到错误页面
	 * 
	 * @param msg
	 * @throws ServletException
	 * @throws IOException
	 */
	public void error(String msg) throws ServletException, IOException;

	/**
	 * 获取请求参数
	 * 
	 * @param name
	 * @return
	 */
	public String getParameter(String name);

	/**
	 * 清理ctx环境，一般是请求结束后的环境清理
	 */
	public void clear();

	/**
	 * 获取缓存在session中的属性
	 * 
	 * @param key
	 * @return
	 */
	public Object getSessionAttribute(String key);

	/**
	 * 将属性/值存储到session中
	 * 
	 * @param key
	 * @param value
	 */
	public void setSessionAttribute(String key, Object value);

	/**
	 * 获取Request中的属性
	 * 
	 * @param key
	 * @return
	 */
	public Object getRequestAttribute(String key);

	/**
	 * 设置Request中属性/值
	 * 
	 * @param key
	 * @param value
	 */
	public void setRequestAttribute(String key, Object value);

	/**
	 * 获取request请求发送时的字符集
	 * 
	 * @return
	 */
	public String getRequestCharacterEncoding();

	/**
	 * 获取request请求中的数据流
	 * 
	 * @return
	 * @throws IOException
	 */
	public InputStream getRequestInputStream() throws IOException;

	/**
	 * 根据类名，返回一个dao。可能是新建的，也可能是缓存的
	 * 
	 * @param clazz
	 * @return
	 */
	public <T extends BaseJDBCDao> T getDao(Class<T> clazz);

	/**
	 * 放回当前上下文对应的数据库连接
	 * 
	 * @return
	 */
	public Connection getConnection();

	public HttpServletRequest getRequest();

	public Connection createConnection() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException;

	/**
	 * 得到临时目录
	 * 
	 * @return
	 */
	public String getTmpPath();

	/**
	 * 完成文件上传操作（从临时上传目录转存到实际文件存储目录）
	 * 
	 * @param tmpFile
	 * @param storeFile
	 * @return
	 */
	public String uploadFile(String tmpFile, String storeFile);
}